﻿using LSG;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// Interface Segration fout
namespace ISF
{
    /// <summary>
    /// Wanneer een bestaande interface overal al wordt gebruikt wil je een interface niet aanpassen wanneer je 
    /// nog een methode toe wilt voegen. In plaats hiervan maak je een nieuwe interface die de oude interface 
    /// implementeert.
    /// </summary>
    interface IDatabase
    {
        void Add(); // old client are happy with these.
        void Read(); // Added for new clients.
    }
}

// Interface Segration goed
namespace ISG
{
    interface IDatabaseV1 : IDatabase // Gets the Add method
    {
        void Read();
    }

    class CustomerwithRead : IDatabase, IDatabaseV1
    {
        public void Add()
        {
	        LSG.Customer obj = new Customer();
            obj.Add();
        }

	    public void Read()
	    {
	        // Implements  logic for read
        }
    }

    class Main
    {
        public void Run()
        {
            // 1000 happy old clients not touched
            IDatabase i = new Customer(); 
            i.Add();

            // new clients
            IDatabaseV1 iv1 = new CustomerwithRead(); 
            iv1.Read();
        }
    }
}
